dofile "lib/radical.lua"

function tile(s) 
  return const.path.gfx.."game/base/"..s..".jpg"; 
end

function cm_tile(s) 
  return const.path.gfx.."game/common/"..s..".jpg"; 
end

function png(s) 
  return const.path.gfx.."game/common/"..s..".png"; 
end

function ey_tile(s) 
  return const.path.gfx.."game/eye/"..s..".jpg"; 
end

function dxml(s)
  return const.path.dlg.."4-mad/petr/"..s..".xml";
end

petr = engine.state {
   font         = "ubuntumono-r.ttf"
  ,fontb        = "ubuntumono-b.ttf"
  ,_ring        = 0     --Number of rings at the gate (0,1,2)
  ,_wait        = false --Petr have to wait near gate
  ,_waitover    = false --Wait near gate is over
  ,_radius      = false --Petr knows that east control tower is for longer radius
  ,_device      = false --Petr needs a special device to connect to a control tower
  ,_deviceplug1 = false --Device is plugged to ECO of a control tower 1
  ,_deviceplug2 = false --Device is plugged to ECO of a control tower 2
  ,_logs1       = false --Logs from tower 1 are copied to device
  ,_logs2       = false --Logs from tower 2 are copied to device
  ,_deviceset   = false --Device is plugged to computer
  ,_foundlog    = false --Peter found log of fallen eye
  ,_tubeopen    = false --Tube 1 is opened
  ,_lock        = false --Peter is susp about tower 1 lock
  ,_halfopen    = false --Control tower 1 is half open
  ,_keys1       = 0     --Peter tries to open tower 1 with keys (0,1,2)
  ,_tube1power  = false --Tube 1 power is one
  ,_tube2power  = true  --Tube 2 power is on
  ,_firstopen   = false --Petr turns on elector panel for the first time
  ,_budka       = false --Electro panel is open
  ,_electro     = false --Electro is on
  ,_alldone     = false --All is done
}

petr_player = musplayer.player {
   sfx("cardrive"):inside("start1")
  ,mus("snowdrop"):inside("incar"):loop()
  ,sfx("communice"):inside("ring_dlg")
  ,sfx("gate"):inside("gateslide"):always()
  ,mute():inside("welcome_dlg"):fade(3000,3000)
  ,sfx("dooropen_echo"):inside("office_transition")
  ,mus("juxtaposition"):inside("office1"):loop()
  ,mus("satiate_strings"):inside("outside"):loop()
  ,mus("satiate"):inside("tube1_controlpanelinside"):when("petr._logs1"):loop()
  ,mute():inside("stepanov_dlg"):fade(3000,3000)
}

main = engine.main {
   start        = chain_ {
                     episode_("4-petr")
                    ,musplayer_("petr_player")
                    ,take_("cellphone")
                    ,event_("stepanovcall")
                    ,walk_("start1")
                  }
  ,finish       = chain_ {
                    unevent_("stepanovcall"),
                    gamefile_("4-mad/crush.lua")
                  }
}


------------------------------------------------------------------------------------------
-- Welcome
------------------------------------------------------------------------------------------

keycard = item {
   nam          = "Удостоверение Петра"
  ,img          = ico "keycard-use"
  ,ico          = ico "keycard"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["welcome1_roman"] = walk_("welcome_dlg2")
                    ,["tube2_controlpanel"] = "И какой в этом смысл? Вряд ли получится подключить сюда удостоверение."
                    ,["tube1_controlpanel"] = 
                        choose_ {
                           ["default"] = "Нет, так открыть щиток не получится. Дверца прилегает совсем плотно, нет никаких щелей."
                          ,["petr._halfopen and petr._tubeopen"] = "Щиток уже открыт."
                          ,["petr._halfopen and not petr._tubeopen"] = 
                              chain_ {
                                set_("petr._tubeopen"),
                                [[Петр просунул свое удостоверение в щель у металлической дверцы и аккуратно отодвинул язычок
                                  замка. Сделать это оказалось совсем не сложно, явно этот замок не смог бы и пары секунд
                                  сопротивляться профессиональному взломщику.]]
                              }
                        }
                  }
}

cellphone = item {
   nam          = "Мобильный телефон"
  ,ico          = ico "cellphone"
  ,activate     = choose_ {
                     ["default"] = chain_ { inventory.clearitem, refresh_("Сейчас Петру не нужно ни с кем говорить.") }
                    ,["petr._alldone and here() ~= office1"] = walk_("stepanov_dlg")
                  }
}

start1 = pause {
   time         = 3000
  ,next         = "start2"
}

start2 = pause {
   tile         = ey_tile "incar"
  ,time         = 1000
  ,next         = "incar"
}

incar = scene {
   tile         = ey_tile "incar"
  ,bounds       = { 170, nil, 700 }
  ,dsc          = [[На улице вновь крапает дождь. Порывистый ветер, который то затихает, то поднимается широкой волной, сметая с деревьев 
                    блеклую листву, поднимает на дорогой какой-то бессвязный мусор -- мятые пластиковые стаканы, скомканные листки бумаги,
                    бесцветные целлофановые пакеты... Возникает такое впечатление, что ты приехал на свалку.]]
  ,alwaysdsc    = true
  ,obj          = { "incar_thoughts" }
  ,nav          = {
                    left = vw("Выйти из машины", chain_ { sound_("cardoor"), walkblack_("yard1") })
                  }
}

incar_thoughts = staticitem {
   dsc          = "Петру даже {не хочется} выходить из машины."
  ,act          = [[К тому же, Лавровский не слишком-то одобрял его идею приехать сюда. Как будто на базе и вправду ничего никогда не может
                    случиться... Впрочем, продолжать исследовать мертвый город казалось Петру куда более бесполезной затеей.]]
  ,showonce     = true
}

yard1 = scene {
   tile         = { cm_tile "clouds4", 0, 20 }
  ,bounds       = { 176, 333, 700 }
  ,dsc          = [[Петр и не заметил, что припарковался рядом с широкой лужей -- выбраться из машины оказалось не так-то просто. Он 
                    попробовал перешагнуть через лужу, но лишь ударился головой о косяк открытой двери и все равно замочил ноги.^
                    Петр остановился неподалеку от машины и стал стирать платком грязь с ботинок. Дождь был мелким и редким, но казалось, 
                    что это лишь небольшое затишье перед грядущим ливнем. Петр терпеть не мог такую погоду. Он посмотрел на свой платок,
                    весь в грязи, и бросил его ближайшую лужу.^^]]
  ,obj          = { "yard1_car" }
  ,enter        = choose_ {
                    ["petr._wait"] = set_("petr._waitover")
                  }
  ,nav          = {
                    up = vw("Ко входу на базу", "yard2")
                  }
}

yard1_car = staticitem {
   dsc          = "У самой обочины, прижавшись колесами к бордюру, стоит {машина} Петра."
  ,act          = "Уезжать пока рано."
}

yard2 = scene {
   tile         = { tile "gate", 0, 85 }
  ,bounds       = { 120, 90, 690 }
  ,dsc          = [[Петра не покидает чувство, что он находится на свалке или... в старом городе, хотя до него отсюда пару
                    десятков миль. Однако что-то вокруг напоминает Петру о том заброшенном цехе, где совсем недавно он искал обломки
                    упавшего Ока. Все здесь кажется каким-то пустым, лишенным жизни.^^]]
  ,obj          = { "yard2_gates", "yard2_coming" }
  ,nav          = {
                    down = vw("К машине", "yard1")
                  }
}

yard2_gates = staticitem {
   dsc          = [[Перед Петром -- облезшие железные ворота. На одной из колонн массивого забора, огораживающего базу, висит железная 
                    коробка {коммуникатора}.]]
  ,act          = walk_("yard2_ring")
  ,alwaysdsc    = true
}

yard2_coming = staticitem {
   dsc          = [[^^С внутренней стороны к воротам приближаются {какие-то люди}.]]
  ,act          = walk_("gateslide")
  ,cnd          = if_("petr._waitover")
}

yard2_ring = scene {
   tile         = { tile "speakerphone", 100, 160 }
  ,bounds       = { 300, 200, 500 }
  ,localact     = choose_ {
                     ["default"] = chain_ { inc_("petr._ring"), sound_("beepring"), walkblack3_("yard2_button1") }
                    ,["petr._wait"] = refresh_("Нет смысла звонить еще раз.")
                  }
  ,dsc          = [[На коммуникатора есть только большая металлическая {localact|кнопка}.]]
  ,alwaysdsc    = true
  ,nav          = {
                    down = vw("Отойти", "yard2")
                  }
}

yard2_button1 = scene {
   enter        = choose_ {
                     ["default"] = walk_("yard2_ring", "Никто не отвечает.")
                    ,["petr._ring==2"] = walk_("ring_dlg")
                  }
}

ring_dlg = dialog {
   bounds       = { 260, 220, 480 }
  ,dsc          = "-- Да, кто это?"
  ,dlg          = dxml "ring"
}

gateslide = slideright {
   tile         = tile "gate"
  ,fading       = 0
  ,x            = 0
  ,y            = 65
  ,endx         = -80
  ,step         = -2
  ,fps          = 30
  ,next         = "welcome_dlg"
}

welcome_dlg = dialog {
   bounds       = { 260, 220, 480 }
  ,dsc          = "-- Петр Каменев?"
  ,dlg          = dxml "welcome1"
}

welcome1 = scene {
   tile         = { tile "clouds", 0, 20 }
  ,bounds       = { nil, 420 }
  ,dsc          = [[{welcome1_roman|Человек}, который назвался Приговым, смотрит на Петра то ли с неприязнью, то ли с недоверием. Рядом с ним 
                    стоят двое мужчин в грязных серых комбинезонах -- они похожи на каких-то техников или рабочих и, кажется, совсем не 
                    проявляют интереса к происходящему.^]]
  ,alwaysdsc    = true
  ,obj          = { "welcome1_search" }
}

welcome1_roman = staticitem {
  act           = "Он ждет, когда Петр покажет ему удостоверение."
}

welcome1_search = matroska {
   { dsc = "{Петр} торопливо ищет в карманах свое удостоверение.", act = "Нет, в нагрудном кармане пиджака нет. Куда же он положил его?" }
  ,{ dsc = "{Петр} торопливо ищет в карманах свое удостоверение.", act = "И здесь тоже нет... Неужели он оставил карточку в офисе?" }
  ,{ dsc = "{Петр} торопливо ищет в карманах свое удостоверение.", 
     act =  chain_ { 
              take_("keycard"), 
              "Ну вот, наконец-то! Петр просто сунул удостоверение в бумажник, который лежал у него в заднем кармане брюк." 
            } 
   }
}

welcome_dlg2 = dialog {
   tile         = { tile "clouds", 0, 20 }
  ,bounds       = { nil, 420 }
  ,dlg          = dxml "welcome2"
}

welcome2 = scene {
   tile         = tile "wall"
  ,bounds       = { 130, nil, 700 }
  ,dsc          = [[Группа людей, которая вела Петра, остановилась у неприглядного двухэтажное здание со стенами из грязных бетонных блоков. 
                    Смятая труба водостока проходила прямо рядом со входом, и весь асфальт у дверей был залит мылкой пенящейся водой.
                    ^^Петр осмотрелся. Ощущение, что он находится на мертвом радиоактивном пустыре, не покидало его. Кроме них, вокруг 
                    никого не было. Вся территория базы, довольно обширная, напоминала какую-то заброшенную строительную площадку, залитую
                    дождевой грязью. Два невысоких бетонных строения. Высокие металлические стержни радио-вышек. И черные жерлова шахт, из 
                    которых взлетают аппараты, едва заметные вдалеке.^^]]
  ,obj          = { "welcome2_roman" }
}

welcome2_roman = staticitem {
   dsc          = "{Пригов} как-то странно ухмылялся, глядя на Петра."
  ,act          = walk_("welcome_dlg3")
}

welcome_dlg3 = dialog {
   tile         = tile "wall"
  ,bounds       = { 130, nil, 700 }
  ,dsc          = [[-- Что, ожидали увидеть что-то другое? Здесь не центральная база, да и дневные патрули тут больше не проводятся.]]
  ,dlg          = dxml "welcome3"
}

office_transition = pause {
   time         = 2000
  ,next         = "office1"
}


------------------------------------------------------------------------------------------
-- Main part
------------------------------------------------------------------------------------------

device = item {
   nam          = "ПКУ"
  ,img          = ico "device-use"
  ,ico          = ico "device"
  ,alwayson     = true
  ,dsc          = location_ {
                     ["default"] = "На столе лежит {прибор} с небольшим экраном -- ПКУ одной из старых ревизий."
                    ,["tube1_controlpanelinside"] = "К контрольному блоку подключен {ПКУ}."
                    ,["tube2_controlpanelinside"] = "К контрольному блоку подключен {ПКУ}."
                  }
  ,tak          = location_ {
                     ["default"] = "Петр взял со стола ПКУ."
                    ,["tube1_controlpanelinside"] = chain_ { unset_("petr._deviceplug1"), "Петр отключил устройство от контрольного блока." }
                    ,["tube2_controlpanelinside"] = chain_ { unset_("petr._deviceplug2"), "Петр отключил устройство от контрольного блока." }
                  }
  ,use          = chooseuse_ {
                     ["default"] = "Это лишено смысла."
                    ,["tube2_controlpanelinside_ecu"] = 
                        chain_ { 
                          set_("petr._deviceplug2"),
                          put_("device", "tube2_controlpanelinside"),
                          drop_("device"),
                          "Петр подключил устройство к контрольному блоку вышки." 
                        }
                    ,["tube1_controlpanelinside_ecu"] = 
                        chain_ { 
                          set_("petr._deviceplug1"),
                          drop_("device"),
                          put_("device", "tube1_controlpanelinside"),
                          "Петр подключил устройство к контрольному блоку вышки." 
                        }
                    ,["computer_port"] = 
                        chain_ {
                          set_("petr._deviceset"),
                          drop_("device"),
                          refresh
                        }
                  }
}

keys = item {
   nam          = "Ключи"
  ,img          = ico "keys-use"
  ,ico          = ico "keys"
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["highwall_panel"] = 
                        choose_ {
                           ["default"] =
                              chain_ {
                                sound_("keys"),
                                set_("petr._budka"),
                                "Первый же ключ, который Петр попробовал из связки, подошел -- и щиток открылся."
                              }
                          ,["petr._budka"] = "Щиток уже открыт."
                        }
                    ,["tube2_controlpanel"] = "Этот щиток и так открыт."
                    ,["tube1_controlpanel"] =
                        choose_ {
                           ["default"] = 
                              chain_ { 
                                sound_("keys"), 
                                inc_("petr._keys1"), 
                                "Петр выбрал один из ключей в связке, но тот никак хотел входить в замочную скважину." 
                              }
                          ,["petr._keys1==1"] = 
                              chain_ { 
                                sound_("keys"), 
                                inc_("petr._keys1"), 
                                "Петр попробовал еще один ключ -- и по-прежнему без результата." 
                              }
                          ,["petr._keys1==2"] = 
                              chain_ {
                                set_("petr._halfopen"),
                                sound_("keys"), 
                                drop_("keys"),
                                [[Наконец ключ вошел в прорезь замка, одна повернуть его у Петра никак не получалось. Видимо, все-таки этот 
                                  ключ и правда не подходит к щитку восточной вышки. Петр попытался достать ключ, но не смог -- тот попросту 
                                  застрял в личинке. Петр дернул за ключ со всей силы, щиток страшно заскрипел, и дверца чуть приоткрылась, 
                                  однако ключ по-прежнему остался торчать в замке. Петр заглянул в образовавшуюся щель у металлической дверцы 
                                  -- похоже, что язычок замка почти вышел из пазов, вот если бы можно было чем-нибудь его отодвинуть.]]
                              }
                        }
                        
                  }
}

keys2 = item {
   nam          = "Ключи"
  ,img          = ico "keys-use"
  ,ico          = ico "keys"
  ,dsc          = "Из замка на щитке торчат застрявшие {ключи}."
  ,tak          = chain_ {
                    sound_("keys"),
                    [[Вытащить ключ из замка Петр так и не смог, тогда он снял остальные ключи с кольца, а тот ключ, которым Петр пытался 
                      открыть щиток, так и остался торчать в замочной скважине.]]
                  }
  ,cnd          = if_("petr._halfopen")
  ,use          = chooseuse_ {
                     ["default"] = "Не стоит этого делать."
                    ,["highwall_panel"] = 
                        choose_ {
                           ["default"] =
                              chain_ {
                                sound_("keys"),
                                set_("petr._budka"),
                                "Первый же ключ, который Петр попробовал из связки, подошел -- и щиток открылся."
                              }
                          ,["petr._budka"] = "Щиток уже открыт."
                        }
                  }
}

office1 = scene {
   tile         = tile "office1"
  ,bounds       = { 230, nil, 630 }
  ,dsc          = choose_ {
                     ["default"] =
                        [[Петр даже оторопел. На секунду ему показалось, что его завели в какой-то заброшенный склад. Свет в помещение был 
                          совсем тусклый, к тому же лампы у потолка постоянно мерцали, однако даже при таком освещении можно было заметить 
                          голые бетонные стены, покрытые выбоинами и трещинами, и ржавеющие трубы отопления. Прямо посреди комнаты стояли 
                          массивные фанерные коробки, которые, казалось, заменяли здесь большую часть мебели.^]]
                    ,["office1._seen"] = 
                        [[Свет в помещении совсем тусклый, а лампы у потолка постоянно мерцают. Из-за этого у Петра даже начинают болеть
                          глаза.]]
                  }
  ,alwaysdsc    = true
  ,obj          = { "prigov" }
  ,nav          = {
                     up = vw("В соседнюю комнату", "office2")
                    ,down = vw("Выйти из здания", "outside")
                  }
}

prigov = staticitem {
   dsc          = [[За длинным, точно обеденным столом, застеленным выцветшеей клеенком, сидит {Пригов} и делает вид, что читает какой-то 
                    отчет.]]
  ,act          = walk_("prigov_dlg")
}

prigov_dlg = dialog {
   tile         = tile "office1"
  ,bounds       = { 230, nil, 630 }
  ,dsc          = "-- Вам чем-то помочь?"
  ,dlg          = dxml "prigov"
  ,talkend      = "office1"
}

office2 = scene {
   tile         = { tile "office2", 0, 20 }
  ,bounds       = { nil, 180 }
  ,dsc          = [[Потолок в этом помещении перегораживают длинные бетонные балки, с которых свисают вниз какие-то перепутанные провода.
                    Но свет здесь довольно яркий, и газовые лампы хотя бы не так мерцают.]]
  ,obj          = { "office2_oldcomputers", "office2_computer" }
  ,nav          = {
                    down = vw("Выйти", "office1")
                  }
}

office2_oldcomputers = staticitem {
   dsc          = [[У обшарпанных стен тянутся рядом старые неработающие {терминалы}, покрытые толстым слоем пыли.]]
  ,act          = "Кажется, что их не включали уже несколько лет. Наверняка ни один из них уже не работает."
  ,showonce     = true
}

office2_computer = staticitem {
   dsc          = [[Рядом с дверью, на неказистой тумбочке, стоит довольно новый на вид {компьютер} с большим плоским монитором. Он даже 
                    смотрится как-то неестественно и чужеродно на фоне столетних ЭВМ и обшарпанных стен из голого бетона.]]
  ,act          = walkblack_("computer")
}

outside = scene {
   tile         = tile "wall"
  ,bounds       = { 130, nil, 700 }
  ,dsc          = [[Вся дорожка у входа залита водой, и Петру приходится перешагивать через огромные лужи. Дождь так и не перестает.]]
  ,alwaysdsc    = true
  ,nav          = {
                     up = vw("К стене", "highwall")
                    ,left = vw("К восточной вышке", "tube1")
                    ,right = vw("К западной вышке", "tube2")
                    ,down = vw("В здание", "office1")
                  }
}

tube1 = scene {
   tile         = tile "tube1"
  ,bounds       = { 280, nil, 560 }
  ,dsc          = [[Высокая дальнобойная вышка -- сейчас везде устанавливают только такие. С помощью этой вышки можно отслеживать и 
                    корректировать маршрут Ока по всей территории города.]]
  ,alwaysdsc    = true
  ,obj          = { "tube1_controlpanel", "keys2" }
  ,nav          = {
                    down = vw("К зданию", "outside")
                  }
}

tube1_controlpanel = staticitem {
   dsc          = [[^^Рядом с вышкой стоит металлический {щиток}.]]
  ,act          = choose_ {
                     ["default"] = 
                        choose_ {
                           ["default"] = 
                              chain_ {
                                set_("petr._lock"),
                                [[Щиток закрыт, однако что-то смущает Петра. На металлической поверхности щитка можно заметить свежие царапины; 
                                  кажется, что личинку замка не так давно меняли.]]
                              }
                          ,["petr._halfopen"] = "Щиток по-прежнему закрыт, хотя похоже, что замок уже еле держится."
                        }
                    ,["petr._tubeopen"] = walk_("tube1_controlpanelinside")
                  }
}

tube1_controlpanelinside = scene {
   tile         = { tile "controlpanel", 0, 20 }
  ,bounds       = { nil, 330 }
  ,obj          = { "tube1_controlpanelinside_power", "tube1_controlpanelinside_ecu" }
  ,nav          = {
                    down = vw("Отойти", "tube1")
                  }
}

tube1_controlpanelinside_power = staticitem {
   dsc          = choose_ {
                     ["default"] = [[В щитке есть {тумблер} для переключения питания -- питание сейчас отключено.]]
                    ,["petr._tube1power"] = 
                        [[В щитке есть {тумблер} для переключения питания -- питание сейчас включено, и над рычагом горит едва заметный 
                          индикатор.]]
                  }
  ,act          = choose_ {
                     ["not petr._electro"] = 
                        chain_ { 
                          sound_("switch"), 
                          "Петр пощелкал тумблером, однако ничего не произошло -- судя по всему, ток на щиток попросту не подается." 
                        }
                    ,["petr._tube1power"] = "Питание на щиток подается, все в порядке."
                    ,["petr._electro and petr._tube2power and not petr._tube1power"] = 
                        chain_ { 
                          sound_("switch"), 
                          unset_("petr._electro"),
                          [[Петр переключил тумблер, индикатор питания на секунду вспыхнул, но потом погас снова. Кажется, теперь щиток снова
                            обесточен.]]
                        }
                    ,["petr._electro and not petr._tube2power and not petr._tube1power"] = 
                        chain_ {
                          sound_("switch"),
                          set_("petr._tube1power"),
                          [[Петр переключил тумблер, и индикатор питания на щитке загорелся.]]
                        }
                  }
}

tube1_controlpanelinside_ecu = staticitem {
   dsc          = [[В щитке установлен контрольный {процессор} вышки с портом для подключения ПКУ.]]
  ,act          = choose_ {
                     ["not petr._deviceplug1"] = 
                        [[Монитора здесь нет, и чтобы считать логи, нужно подключить к нему ПКУ -- небольшой приборчик, который автоматически 
                          загружает все операционные данные с управляющего блока вышки и проводит диагностику. ]]
                    ,["not petr._tube1power"] = "На щиток не поступает электричество."
                    ,["petr._deviceplug1 and petr._tube1power"] = 
                        choose_ {
                           ["default"] = 
                              chain_ { 
                                sound_("beep"), 
                                unset_("petr._logs2"),
                                set_("petr._logs1"), 
                                [[Петр нажал на кнопку, включающую режим диагностики. Раздался краткий гудок, и несколько раз мигнул индикатор 
                                  записи на контрольной панели. На экранчике ПКУ высветилось:^ Соотв. ГСОР-134.^
                                  Ср. пот. пкт -- 1.02%.^Общ. в.б.р. - 12 ч.^Логи зап.]]
                              }
                          ,["petr._logs1"] = "А смысл? На ПКУ уже записаны логи с этой вышки."
                        }
                  }
}

tube2 = scene {
   tile         = { tile "tube2", 509, 20 }
  ,bounds       = { nil, nil, 500 }
  ,dsc          = [[Эта радио-вышка не очень высокая -- она подходит только для управления аппаратами на небольшом расстоянии. Последнее время
                    их вообще перестали использовать, и такие вышки остались лишь на старых базах, вроде этой.]]
  ,alwaysdsc    = true
  ,obj          = { "tube2_dsc", "tube2_controlpanel" }
  ,nav          = {
                    down = vw("К зданию", "outside")
                  }
}

tube2_dsc = staticitem {
   dsc          = [[Странно, что из двух вышек, которые здесь установлены, в итоге решили использовать именну эту. Ведь ей явно лет двадцать,
                    не меньше.]]
  ,cnd          = not_("tube2._seen")
}

tube2_controlpanel = staticitem {
   dsc          = [[^^Рядом с вышкой стоит металлический {щиток}.]]
  ,act          = walk_("tube2_controlpanelinside")
}

tube2_controlpanelinside = scene {
   tile         = { tile "controlpanel", 0, 20 }
  ,bounds       = { nil, 330 }
  ,dsc          = [[И правда, дверца щитка оказалась не закрыта. Это явно противоречит принятым политикам безопасности. Впрочем, Петру сейчас
                    не до этого.^^]]
  ,obj          = { "tube2_controlpanelinside_power", "tube2_controlpanelinside_ecu" }
  ,nav          = {
                    down = vw("Отойти", "tube2")
                  }
}

tube2_controlpanelinside_power = staticitem {
   dsc          = choose_ {
                     ["default"] = "Здесь можно {включить} подачу энергии,"
                    ,["petr._tube2power"] = "Здесь можно {отключить} подачу энергии,"
                  }
  ,act          = choose_ {
                     ["default"] = chain_ { sound_("switch"), set_("petr._tube2power"), "Петр включил питание щитка." }
                    ,["petr._tube2power"] = chain_ { sound_("switch"), unset_("petr._tube2power"), "Петр отлючил питание щитка." }
                  }
}

tube2_controlpanelinside_ecu = staticitem {
   dsc          = [[а еще в щитке установлен контрольный {процессор} вышки -- причем на вид ему тоже пару десятков лет, не меньше. Хотя 
                    интерфейсы доступа для управляющих блоков не менялись, так что это не должно быть проблемой.]]
  ,act          = choose_ {
                     ["default"] = "Надо бы сначала включить питание."
                    ,["petr._tube2power"] = 
                        chain_ {
                          set_("petr._device"),
                          [[Монитора здесь нет, и чтобы считать логи, нужно подключить к нему ПКУ -- небольшой приборчик, который автоматически 
                            загружает все операционные данные с управляющего блока вышки и проводит диагностику. ]]
                        }
                    ,["petr._tube2power and petr._deviceplug2"] = 
                        choose_ {
                           ["default"] = 
                              chain_ { 
                                sound_("beep"), 
                                unset_("petr._logs1"),
                                set_("petr._logs2"), 
                                [[Петр нажал на кнопку, включающую режим диагностики. Раздался краткий гудок, и несколько раз мигнул индикатор 
                                  записи на контрольной панели. На экранчике ПКУ высветилось:^ Соотв. ГСОР-134.^
                                  Ср. пот. пкт -- 5.67%.^Общ. в.б.р. - 124 ч.^Логи зап.]]
                              }
                          ,["petr._logs2"] = "А смысл? На ПКУ уже записаны логи с этой вышки."
                        }
                  }
}

highwall = scene {
   tile         = { tile "highwall", 0, 20 }
  ,bounds       = { nil, 310 }
  ,dsc          = [[База огорожена высокой бетонной стеной, которая напоминает Петру о Черте. По грязным бетонным блокам стекает дождевая 
                    вода.^]]
  ,alwaysdsc    = true
  ,obj          = { "highwall_panel" }
  ,nav          = {
                     left = vw("К выходу"):noway(
                        choose_ {
                           ["default"] = "Нет, уходить еще рано."
                          ,["petr._alldone"] = "Надо бы сначала ответить на телефон."
                        })
                    ,down = vw("К зданию", "outside")
                  }
}

highwall_panel = staticitem {
   dsc          = [[Рядом со стеной стоит трансформаторная будка, выкрашенная в неприятный грязно-голубоватый свет и покрытая длинными 
                    пятнами ржавчины. У будки есть {щиток}, на которым выведены черной краской неразборчивые, наполовину стершиеся цифры.]]
  ,act          = choose_ {
                     ["default"] = "Щиток закрыт на ключ."
                    ,["petr._budka and not petr._electro and petr._firstopen"] = 
                        chain_ {
                          set_("petr._electro"),
                          set_("petr._firstopen"),
                          [[Странно... Судя по всему, часть соединений здесь попросту перегорели, причем никакого ремонта не производилось.
                            И контур восточной вышки попросту отключен, потому-то на щиток и не подается ток.^ Петр подключил контур, ожидая,
                            что в любой момент сеть закоротит, однако ничего не произошло.]]
                        }
                    ,["petr._budka and not petr._electro and not petr._firstopen"] = 
                        chain_ {
                          set_("petr._electro"),
                          "Петр подключил контур восточной вышки, теперь на щиток должно подаваться электричество."
                        }
                    ,["petr._budka and petr._electro"] = "Нужный контур уже подключен, больше делать тут нечего."
                  }
}


------------------------------------------------------------------------------------------
-- Terminal
------------------------------------------------------------------------------------------

computer_port = staticitem {
   dsc          = "У компьютера есть {порт} с двойным разъемом."
  ,cnd          = not_("petr._deviceset")
  ,act          = walk_("computer_port_scene")
}

computer_portdevice = staticitem {
   dsc          = "К компьютеру подключен {ПКУ}."
  ,act          = chain_ { take_("device"), unset_("petr._deviceset"), walk_("computer") }
  ,cnd          = if_("petr._deviceset")
}

computer_port_scene = cutscene {
   bounds       = { 260, 240, 480 }
  ,dsc          = [[Судя по разъемам, это порт для подключения ПКУ, устройства для считывания диагностической информации с вышек.]]
  ,next         = "computer"
}

function terminal_computer_window(o)
  local ondrawbg = o.ondrawbg;
  o.ondrawbg    = function(s,p)
                    drawing.draw_pic(p, png "monitor", 140, 57);
                    if o.title ~= nil then
                      drawing.draw_text(p, o.title, s.defx+10, s.defy+10, "white", petr.fontb, 14);
                      drawing.draw_mask(p, s.defx+10, s.defy+32, 547, 2, "white", 255);
                    end
                    return ondrawbg(s,p);
                  end
  o.bounds      = { nil, 560, 900 };
  o.defx        = (const.picwidth-640)/2 + 20;
  o.defy        = (const.picheight-485)/2 + 40;
  o.bgcolor     = "black";
  o.selcolor    = "white";
  o.selalpha    = 100;
  o.disableinv  = true
  o.noheader    = true;
  o.fading      = 0;
  o.obj         = { "computer_port", "computer_portdevice" };
  o.nav         = {
                    down = vw("Отойти от компьютера", "office2")
                  };
  return scene(o);
end

_scanix = {};
function computer_terminal(o)
  local ret = terminal_computer_window {
     _curtext   = "Управляющая система SCANIX 14.18.5903"
    ,obj        = o.obj
    ,drawtext   = function(s,p,txt,x,y,font,msk,fld)
                    if y >= s.defy + 10 then
                      if font == nil then
                        font = petr.font;
                      end
                      drawing.draw_text(p, txt, x, y, "white", font, 14);
                      if msk then
                        s.map:add(msk, x, y, drawing.text_width(txt, font, 14), drawing.text_height(font, 14));
                      end
                    end
                  end
    ,ondrawbg   = function(s,p)
                    if s.map == nil then
                      s.map = map(0, 0, const.winwidth, const.winheight);
                    end
                    local x,y = s.defx+10, s.defy+10;
                    
                    if s._shifty ~= nil then
                      y = y - s._shifty;
                    end
                    
                    local len = 0;
                    for i,v in ipairs(_scanix) do
                      for i,v2 in pairs(v:lines()) do
                        len = len + 20;
                      end
                    end
                    
                    local cur = s._curtext;
                    for i,v in pairs(cur:lines()) do
                      len = len + 20;
                    end
                    
                    if len > 340 then
                      y = y - (len - 340);
                    end
                    
                    for i,v in ipairs(_scanix) do
                      for i,v2 in pairs(v:lines()) do
                        if v2:charat(1) == ">" then
                          s:drawtext(p, v2, x, y, petr.fontb);
                        else
                          s:drawtext(p, v2, x, y);
                        end
                        y = y + 20;
                      end
                    end
                    
                    for i,v in pairs(cur:lines()) do
                      s:drawtext(p, v, x, y);
                      y = y + 20;
                    end
                    
                    y = y + 20;
                    local wi = 60;
                    if s.cmdi ~= 0 then
                      wi = drawing.text_width("> "..s.cmd[s.cmdi], petr.fontb, 14);
                    end
                    s.map:add("CMD", x, y, wi, 16);
                    s:drawtext(p, ">", x, y, petr.fontb);
                    
                    if s.cmdi ~= 0 then
                      s:drawtext(p, s.cmd[s.cmdi], x+14, y, petr.fontb);
                      s:drawtext(p, "[Ввод]", x+500, y, petr.font, "ENTER");
                    else
                      s.map:remove("ENTER");
                    end
                    
                    return p;
                  end
    ,drawitem   = function(s,p,v,x,y)
                    drawing.draw_text(p, v.dsc, x, y+4, "white", petr.font, 14);
                  end
    ,cmd        = {
                     "HELP"
                    ,"HOSTNAME"
                    ,"CLEAR"
                    ,"IPV6"
                    ,"IPV4"
                    ,"VER"
                    ,"USER"
                    ,"DIAG"
                    ,"UPDATE"
                    ,"ACSLVL"
                    ,"DATE"
                    ,"LOCAL"
                  }
    ,cmdsc      = {
                     "список всех команд"
                    ,"имя хоста"
                    ,"очистить экран"
                    ,"данные подключения (IPV6)"
                    ,"данные подключения (IPV4)"
                    ,"версия оснастки"
                    ,"данные о подключенном пользователе"
                    ,"оснастка ПКУ"
                    ,"установка обновлений"
                    ,"текущий уровень доступа"
                    ,"текущая дата"
                    ,"текущие региональные настройки"
                  }
    ,cmdi       = 0
    ,onclick    = function(s,x,y)
                    local sel = s.map:get(x,y);
                    if sel == "CMD" then
                      s.cmdi = s.cmdi + 1;
                      if s.cmdi > table.len(s.cmd) then
                        s.cmdi = 0;
                      end
                      refresh();
                    elseif sel == "ENTER" then
                      table.insert(_scanix, s._curtext);
                      table.insert(_scanix, "");
                      table.insert(_scanix, "> "..s.cmd[s.cmdi]);
                      local cmd = s.cmd[s.cmdi];
                      play_sound("beep");
                      if cmd == "HELP" then
                        s._curtext = "^Список команд терминала:";
                        for i,v in ipairs(s.cmd) do
                          s._curtext = s._curtext .. "^" .. v;
                          local ilen = v:unilen();
                          local spc = "";
                          while ilen < 17 do
                            spc = spc .. " ";
                            ilen = ilen + 1;
                          end
                          s._curtext = s._curtext .. spc .. s.cmdsc[i];
                        end
                      elseif cmd == "HOSTNAME" then
                        s._curtext = "OSR-NVM-ADMVORON";
                      elseif cmd == "CLEAR" then
                        s._curtext = "Управляющая система SCANIX 14.18.5903";
                        _scanix = {};
                      elseif cmd == "IPV6" then
                        s._curtext = "^Туннельный адаптер Teleredo Tunneling Pseudo-Interface:^DNS-суффикс подключения . . . . . :^IPv6-адрес. . . . . . . . . . . . : 2001:0:5ef5:79fd:200a:1b1d:a070:2a1d^Локальный IPv6-адрес канала . . . : fe80::200a:1b1d:a070:2a1d%13^Основной шлюз . . . . . . . . . . :";
                      elseif cmd == "IPV4" then
                        s._curtext = "^Ethernet adapter Подключение по локальной сети:^DNS-суффикс подключения . . . . . :^IPv4-адрес. . . . . . . . . . . . : 192.168.0.173^Маска подсети . . . . . . . . . . : 255.255.255.0^Основной шлюз . . . . . . . . . . : 192.168.0.1";
                      elseif cmd == "DIAG" then
                        if petr._deviceset then
                          s._curtext = "Программа завершила свою работу с кодом 0.";
                          if petr._logs1 then
                            walk("tube1_logselect");
                          elseif petr._logs2 then
                            walk("tube2_logselect");
                          else
                            play_sound("error");
                            s._curtext = "Ошибка! Нет данных!"
                          end
                        else
                          play_sound("error");
                          s._curtext = "Ошибка! Подключите устройство БКУ к коммуникационному порту."
                        end
                      elseif cmd == "VER" then
                        s._curtext = "SCANIX 14.18.5903"
                      elseif cmd == "USER" then
                        s._curtext = "ADM-VORON"
                      elseif cmd == "UPDATE" then
                        s._curtext = "Все последние пакеты обновлений установлены. Обновления не требуются.";
                      elseif cmd == "ACSLVL" then
                        s._curtext = "System Administrator";
                      elseif cmd == "DATE" then
                        s._curtext = "12.06.2010";
                      elseif cmd == "LOCAL" then
                        s._curtext = "ru-RU";
                      end
                      s.cmdi = 0;
                      refresh();
                    end
                  end
  }
  copy_attr(o, ret);
  return ret;
end

function computer_terminallist(o)
  local ret = terminal_computer_window {
     img        = o.img
    ,title      = o.title
    ,drawtext   = function(s,p,txt,x,y,font,msk,fld)
                    if y >= s.defy + 10 then
                      if font == nil then
                        font = petr.font;
                      end
                      drawing.draw_text(p, txt, x, y, "white", font, 14);
                      if msk then
                        s.map:add(msk, x, y, drawing.text_width(txt, font, 14), drawing.text_height(font, 14));
                      end
                    end
                  end
    ,ondrawbg   = function(s,p)
                    if s.map == nil then
                      s.map = map(0, 0, const.winwidth, const.winheight);
                    end
                    local x,y = s.defx+10, s.defy+50;
                    s:drawtext(p, "Выберите дату:", x, y);
                    y = y + 20;
                    local n = 0;
                    
                    for i,v in ipairs(s.items) do
                      s:drawtext(p, v.dsc, x, y, petr.fontb, i);
                      y = y + 20;
                      n = i;
                    end
                    
                    s:drawtext(p, tostring(n+1)..". Завершить сеанс", x, y+20, petr.fontb, "EXIT");
                    return p;
                  end
    ,drawitem   = function(s,p,v,x,y)
                    if v ~= nil then
                      s:drawtext(p, v.dsc, x-4, y, petr.fontb);
                    end
                  end
    ,onclick    = function(s,x,y)
                    local sel = s.map:get(x,y);
                    if sel == "EXIT" then
                      walk(o.back);
                    elseif sel ~= nil and s.items[sel] ~= nil then
                      walk(s.items[sel].scr);
                    end
                  end
  }
  copy_attr(o, ret);
  return ret;
end

function computer_terminaltable(o)
  local ret = terminal_computer_window {
     img        = o.img
    ,title      = o.title
    ,enter      = o.enter
    ,drawtext   = function(s,p,txt,x,y,font,msk,fld)
                    if y >= s.defy + 10 then
                      if font == nil then
                        font = petr.font;
                      end
                      drawing.draw_text(p, txt, x, y, "white", font, 14);
                      if msk then
                        s.map:add(msk, x, y, drawing.text_width(txt, font, 14), drawing.text_height(font, 14));
                      end
                    end
                  end
    ,ondrawbg   = function(s,p)
                    if s.map == nil then
                      s.map = map(0, 0, const.winwidth, const.winheight);
                    end
                    local x,y = s.defx+10, s.defy+42;
                    
                    s:drawtext(p, "Данные за "..o.date, x, y, petr.font);
                    s:drawtext(p, "Завершить сеанс", x+437, y, petr.fontb, "EXIT");
                    
                    y = y + 25;
                    
                    drawing.draw_mask(p, x, y, 546, 1, "white", 255);
                    drawing.draw_mask(p, x, y+25, 546, 1, "white", 255);
                    drawing.draw_mask(p, x+25, y, 1, 300, "white", 255);
                    drawing.draw_mask(p, x+210, y, 1, 300, "white", 255);
                    drawing.draw_mask(p, x+310, y, 1, 300, "white", 255);
                    drawing.draw_mask(p, x, y+300, 546, 1, "white", 255);
                    
                    s:drawtext(p, "Выбранный элемент:", x, y+307);
                    if s._sel == nil then
                      s:drawtext(p, "[нет]", x+130, y+307);
                    else
                      s:drawtext(p, s._sel, x+130, y+307);
                    end
                    
                    y = y + 5;
                    s:drawtext(p, "#", x, y, petr.fontb);
                    s:drawtext(p, o.cols[1], x+30, y, petr.fontb);
                    s:drawtext(p, o.cols[2], x+220, y, petr.fontb);
                    s:drawtext(p, o.cols[3], x+320, y, petr.fontb);
                    
                    y = y + 30;
                    
                    for i,v in ipairs(s.items) do
                      s:drawtext(p, i, x, y, petr.fontb);
                      s:drawtext(p, v.col1, x+30, y, petr.fontb);
                      s:drawtext(p, v.col2, x+220, y, petr.fontb);
                      s:drawtext(p, v.col3, x+320, y, petr.fontb);
                      s.map:add(i, x, y, 542, 16);
                      y = y + 20;
                    end
                    return p;
                  end
    ,drawitem   = function(s,p,v,x,y)
                    
                  end
    ,onclick    = function(s,x,y)
                    local sel = s.map:get(x,y);
                    if sel == "EXIT" then
                      walk(o.back);
                    elseif sel ~= nil then
                      local si = s.items[sel];
                      if si ~= nil then
                        if si.act ~= nil then
                          rcall(si.act);
                        end
                        if si.det == nil then
                          s._sel = sel .. ". Учетная запись "..si.col2.." успешно авторизована."
                        else
                          s._sel = sel .. ". "..si.det;
                        end
                      end
                      refresh();
                    end
                  end
  }
  copy_attr(o, ret);
  return ret;
end

tube1_logselect = computer_terminallist {
   title        = "Операционный лог РВК 21A"
  ,items        = {
                     { dsc = "1. 07.06.2010", scr = "tube1_log1" }
                    ,{ dsc = "2. 08.06.2010", scr = "tube1_log2" }
                    ,{ dsc = "3. 09.06.2010", scr = "tube1_log3" }
                    ,{ dsc = "4. 10.06.2010", scr = "tube1_log4" }
                    ,{ dsc = "5. 11.06.2010", scr = "tube1_log5" }
                  }
  ,back         = "computer"
}

tube1_log1 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "07.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {}
  ,back         = "tube1_logselect"
}

tube1_log2 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "08.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,enter        = set_("petr._foundlog")
  ,items        = {
                     { col1 = "08.06.2010 09:43:34.4956", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (18.5%)." }
                    ,{ col1 = "08.06.2010 09:43:46.3040", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (16.7%)." }
                    ,{ col1 = "08.06.2010 09:55:12.0430", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (14.2%)." }
                    ,{ col1 = "08.06.2010 09:59:01.4700", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом TA-231 налажена." }
                    ,{ col1 = "08.06.2010 10:24:11.4959", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута TA-231." }
                    ,{ col1 = "08.06.2010 10:41:44.0498", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута TA-231." }
                    ,{ col1 = "08.06.2010 10:59:09.2389", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута TA-231." }
                    ,{ col1 = "08.06.2010 11:12:36.7059", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута TA-231." }
                    ,{ col1 = "08.06.2010 11:39:12.4905", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута TA-231." }
                    ,{ col1 = "08.06.2010 11:56:52.9495", col2 = "Контроль", col3 = "Ошибка", det = "Связь с аппаратом TA-231 потеряна." }
                  }
  ,back         = "tube2_logselect"
}

tube1_log3 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "09.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {}
  ,back         = "tube1_logselect"
}

tube1_log4 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "10.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {}
  ,back         = "tube1_logselect"
}

tube1_log5 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "11.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {}
  ,back         = "tube1_logselect"
}

tube2_logselect = computer_terminallist {
   title        = "Операционный лог РВК 21В"
  ,items        = {
                     { dsc = "1. 07.06.2010", scr = "tube2_log1" }
                    ,{ dsc = "2. 08.06.2010", scr = "tube2_log2" }
                    ,{ dsc = "3. 09.06.2010", scr = "tube2_log3" }
                    ,{ dsc = "4. 10.06.2010", scr = "tube2_log4" }
                    ,{ dsc = "5. 11.06.2010", scr = "tube2_log5" }
                  }
  ,back         = "computer"
}

tube2_log1 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "07.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {
                     { col1 = "07.06.2010 21:42:43.9133", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (12.1%)." }
                    ,{ col1 = "07.06.2010 21:59:12.2305", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (10.7%)." }
                    ,{ col1 = "07.06.2010 22:44:01.4066", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом УБ-101 налажена." }
                    ,{ col1 = "07.06.2010 23:00:00.0012", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                    ,{ col1 = "07.06.2010 00:00:01.9034", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                  }
  ,back         = "tube2_logselect"
}

tube2_log2 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "08.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {
                     { col1 = "08.06.2010 21:32:12.7304", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (18.5%)." }
                    ,{ col1 = "08.06.2010 21:33:14.1315", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (16.7%)." }
                    ,{ col1 = "08.06.2010 21:33:16.9930", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (19.4%)." }
                    ,{ col1 = "08.06.2010 21:45:12.5315", col2 = "Диагностика", col3 = "Предуждение", det = "Высокий уровень интерференции (14.2%)." }
                    ,{ col1 = "08.06.2010 22:46:11.3123", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом УБ-101 налажена." }
                    ,{ col1 = "08.06.2010 23:00:02.1345", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                    ,{ col1 = "08.06.2010 00:00:04.4434", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                  }
  ,back         = "tube2_logselect"
}

tube2_log3 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "09.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {
                     { col1 = "09.06.2010 22:45:49.8495", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом налажена УБ-101." }
                    ,{ col1 = "09.06.2010 23:00:09.2345", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                    ,{ col1 = "09.06.2010 00:00:12.8548", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                  }
  ,back         = "tube2_logselect"
}

tube2_log4 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "10.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {
                     { col1 = "10.06.2010 22:39:12.4583", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом налажена УБ-101." }
                    ,{ col1 = "10.06.2010 23:00:01.9495", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                    ,{ col1 = "10.06.2010 00:00:11.3450", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                  }
  ,back         = "tube2_logselect"
}

tube2_log5 = computer_terminaltable {
   title        = "Журнал событий"
  ,date         = "11.06.2010"
  ,cols         = { "Дата и время", "Процесс", "Тип" }
  ,items        = {
                     { col1 = "11.06.2010 22:37:12.1264", col2 = "Контроль", col3 = "Информация", det = "Связь с аппаратом налажена УБ-101." }
                    ,{ col1 = "11.06.2010 23:00:08.0344", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                    ,{ col1 = "11.06.2010 00:00:01.4398", col2 = "Контроль", col3 = "Информация", det = "Корректировка маршрута УБ-101." }
                  }
  ,back         = "tube2_logselect"
}


computer = computer_terminal {

}


------------------------------------------------------------------------------------------
-- Final
------------------------------------------------------------------------------------------

stepanovcall = event {
  invoke        = function(s)
                    if petr._alldone and deref(here()) ~= "office1" then
                      play_sound("phone");
                      here().tmpdsc = "Звонит телефон.";
                    end
                  end
}

stepanov_dlg = dialog {
   bounds       = { 260, 220, 480 }
  ,dlg          = dxml "stepanov"
}